const readline = require('readline');
const rl = readline.createInterface({ input: process.stdin });
let input = [];

rl.on('line', line => input.push(line.trim()));
rl.on('close', () => {
  let idx = 0;
  const T = parseInt(input[idx++]);

  for (let t = 0; t < T; t++) {
    const x = parseInt(input[idx++]);
    
    // 【优化修改 - 第13-23行】
    // 完美数的二进制长度必须是偶数，如果x的二进制长度是奇数，可以直接跳到下一个偶数长度
    let num = x;
    const bitLen = num.toString(2).length;
    
    // 如果二进制长度是奇数，跳到下一个偶数长度的最小完美数
    if (bitLen % 2 === 1) {
      // 偶数长度L的最小完美数 = 2^(L-1) + 2^(L/2-1) - 1
      const nextLen = bitLen + 1;
      const k = nextLen / 2;
      num = Math.pow(2, nextLen - 1) + Math.pow(2, k - 1) - 1;
    }
    
    // 【优化修改 - 第26-42行】添加长度边界检查，避免在同一长度搜索太久
    while (true) {
      const currentLen = num.toString(2).length;
      
      // 如果当前长度是奇数，直接跳到下一个偶数长度
      if (currentLen % 2 === 1) {
        const nextLen = currentLen + 1;
        const k = nextLen / 2;
        num = Math.pow(2, nextLen - 1) + Math.pow(2, k - 1) - 1;
        continue;
      }
      
      if (isPerfect(num)) {
        console.log(num);
        break;
      }
      num++;
    }
  }
});

// 【优化修改 - 第37-46行】使用位运算代替字符串操作，提升性能
function isPerfect(n) {
  // 计算二进制长度
  const bitLen = n.toString(2).length;
  // 统计1的个数（使用位运算）
  let ones = 0;
  let temp = n;
  while (temp > 0) {
    ones += temp & 1;
    temp >>= 1;
  }
  const zeros = bitLen - ones;
  return ones === zeros;
}

